const fs = require('fs');
const XLSX = require('xlsx');

// 读取 GeoJSON 文件
function readGeoJSON(filePath) {
  const data = fs.readFileSync(filePath, 'utf8');
  return JSON.parse(data);
}

function identifyLongitudeAndLatitude(coordinates) {
  if (!Array.isArray(coordinates) || coordinates.length !== 2) {
    return {
      error: '坐标数组必须是长度为 2 的数组。',
    };
  }

  const [v1, v2] = coordinates;

  const isLng = (val) => val >= -180 && val <= 180;
  const isLat = (val) => val >= -90 && val <= 90;

  const v1IsLng = isLng(v1);
  const v2IsLng = isLng(v2);
  const v1IsLat = isLat(v1);
  const v2IsLat = isLat(v2);

  // 明确的组合
  if (v1IsLng && v2IsLat) {
    return { longitude: v1, latitude: v2 };
  }
  if (v2IsLng && v1IsLat) {
    return { longitude: v2, latitude: v1 };
  }
  // 不明确的组合（例如 [90, 90]）
  if (v1IsLat && v2IsLat) {
    return {
      longitude: v1, latitude: v2, warning: '两个值都在纬度范围，可能无法准确判断',
    };
  }
  if (v1IsLng && v2IsLng) {
    return {
      longitude: v1, latitude: v2, warning: '两个值都在经度范围，可能无法准确判断',
    };
  }
  return {
    error: '无法根据数值判断经纬度，请检查坐标值。',
  };
}

// 提取所需属性并返回一个数组
function extractProperties(features) {
  const result = [];
  features.forEach(feature => {
    // result.push({
    //   parentName: feature.cityName,
    //   name: feature.name,
    //   code: feature.code,
    //   lat: feature.lat,
    //   lon: feature.lon,
    //   remarks: feature.remarks,
    // });

    const properties = feature.properties;
    // 检查是否存在所需的属性
    if (
      properties &&
      properties.parent &&
      properties.parent.adcode !== undefined &&
      properties.name !== undefined &&
      properties.adcode !== undefined
    ) {
      const center = properties.center;
      const data = identifyLongitudeAndLatitude(center);
      result.push({
        parentName: '新乡市',
        parentCode: properties.parent.adcode,
        name: properties.name,
        code: properties.adcode,
        longitude: data.longitude,
        latitude: data.latitude,
      });
    } else {
      console.warn('Skipping feature due to missing properties:', feature);
    }
  });
  return result;
}

// 将数据写入 Excel 文件
function writeXLSX(data, outputFilePath) {
  const worksheet = XLSX.utils.json_to_sheet(data);
  const workbook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
  XLSX.writeFile(workbook, outputFilePath);
}

// 主函数
function processGeoJSON(inputFilePath, outputFilePath) {
  // 读取 GeoJSON 文件
  const geojsonData = readGeoJSON(inputFilePath);

  // 提取所需的属性
  const extractedData = extractProperties(geojsonData.features);
  // const extractedData = extractProperties(geojsonData.HttpContent.urbanDataList);

  // 写入 Excel 文件
  writeXLSX(extractedData, outputFilePath);

  console.log(`Data has been successfully written to ${outputFilePath}`);
}

// 使用示例
const inputFilePath = './geojson/新乡市区县.json'; // 替换为你的 GeoJSON 文件路径
const outputFilePath = './geojson/新乡市区县.xlsx'; // 替换为你希望保存的 Excel 文件路径

processGeoJSON(inputFilePath, outputFilePath);
